package com.abcode.test.springbootmybatisplus.gen.nick;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用户配置加载器，用于加载 auto_user_config.json 文件
 */
@Component
public class UserConfigLoader {

    private static final String CONFIG_FILE_PATH = "src/main/resources/auto_user_config.json";

    /**
     * 加载用户配置文件
     *
     * @return 配置数据列表
     * @throws IOException 如果文件读取失败
     */
    public List<Map<String, Object>> loadUserConfig() throws IOException {
        // 读取 JSON 文件内容
        byte[] jsonData = Files.readAllBytes(Paths.get("D:/ab/my-pro/test-abcode/spring-boot-test/spring-boot-mybatis-plus/src/main/resources/auto_user_config.json"));

        // 使用 Jackson 解析 JSON 数据
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.readValue(new String(jsonData), new TypeReference<List<Map<String, Object>>>() {
        });
    }

    /**
     * 获取所有不重复的 userId 集合
     *
     * @return 不重复的 userId 集合
     * @throws IOException 如果文件读取失败
     */
    public Set<String> getAllUniqueUserIds() throws IOException {
        List<Map<String, Object>> configData = loadUserConfig();
        Set<String> uniqueUserIds = new HashSet<>();

        for (Map<String, Object> entry : configData) {
            List<Map<String, Object>> userList = (List<Map<String, Object>>) entry.get("userList");
            if (userList != null) {
                for (Map<String, Object> user : userList) {
                    Object userIdObj = user.get("userId");
                    if (userIdObj != null && userIdObj instanceof String) {
                        uniqueUserIds.add((String) userIdObj);
                    } else if (userIdObj != null && userIdObj instanceof Integer) {
                        uniqueUserIds.add(String.valueOf(userIdObj));
                    }
                }
            }
        }

        return uniqueUserIds;
    }

    /**
     * 主方法：测试加载功能
     */
    public static void main(String[] args) {
        try {
            UserConfigLoader loader = new UserConfigLoader();
            //List<Map<String, Object>> configData = loader.loadUserConfig();

            // 打印加载的配置数据
//            for (Map<String, Object> entry : configData) {
//                System.out.println("Start Time: " + entry.get("startTime"));
//                System.out.println("End Time: " + entry.get("endTime"));
//
//                List<Map<String, Object>> userList = (List<Map<String, Object>>) entry.get("userList");
//                for (Map<String, Object> user : userList) {
//                    System.out.println("  User ID: " + user.get("userId"));
//                    System.out.println("  Op Type: " + user.get("opType"));
//                    System.out.println("  Blind Code: " + user.get("blindCode"));
//                    System.out.println("  Visit Level: " + user.get("visitLevel"));
//                    System.out.println("  Status: " + user.get("status"));
//                }
//            }

            // 测试新添加的方法
            Set<String> userIds = loader.getAllUniqueUserIds();
            System.out.println("\n所有不重复的 UserId:");
            userIds.forEach(System.out::println);

        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("加载用户配置文件失败: " + e.getMessage());
        }
    }
}